小编典典

枚举和匹配属性的 C# 命名约定

all

我经常发现自己实现了一个类,它维护某种自己的状态属性作为枚举:我有一个 Status 枚举和一个 Status 类型的 Status 属性。我应该如何解决这个名称冲突?

public class Car
{
  public enum Status
  {
    Off,
    Starting,
    Moving
  };

  Status status = Status.Off;

  public Status Status // <===== Won't compile =====
  {
    get { return status; }
    set { status = value; DoSomething(); }
  }
}

如果 Status 枚举对不同类型是通用的,我会把它放在课堂之外,问题就会得到解决。但 Status 仅适用于 Car,因此在类之外声明枚举没有意义。

在这种情况下,您使用什么命名约定?

注意:在对此问题的答案的评论中对该问题进行了部分辩论。由于这不是主要问题,因此没有引起太多关注。

编辑:Filip Ekberg 针对“状态”的特定情况提出了一个 IMO 极好的解决方法。然而,我会很高兴阅读有关枚举/属性名称不同的解决方案,如 Michael Prewecki 的回答

EDIT2(2010 年 5 月):我最喜欢的解决方案是将枚举类型名称复数,正如 Chris S 所建议的那样。根据 MS 指南,这应该仅用于标志枚举。但我越来越喜欢它了。我现在也将它用于常规枚举。


阅读 246

收藏
2022-04-13

共1个答案

小编典典

JSON格式非常适合我。标准库提供了编写缩进数据结构的方法,因此可读性很强。

另请参阅此 golang-nuts
线程

JSON 的好处是解析和人类可读/可编辑相当简单,同时为列表和映射提供语义(这可以变得非常方便),而许多 ini 类型的配置解析器并非如此。

示例用法:

conf.json

{
    "Users": ["UserA","UserB"],
    "Groups": ["GroupA"]
}

读取配置的程序

import (
    "encoding/json"
    "os"
    "fmt"
)

type Configuration struct {
    Users    []string
    Groups   []string
}

file, _ := os.Open("conf.json")
defer file.Close()
decoder := json.NewDecoder(file)
configuration := Configuration{}
err := decoder.Decode(&configuration)
if err != nil {
  fmt.Println("error:", err)
}
fmt.Println(configuration.Users) // output: [UserA, UserB]
2022-04-13